From 671871b43eb21cd5983b739d26fffdb2af502a12 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Fri, 22 Mar 2013 18:45:24 +0900 Subject: [PATCH] GtkMessageDialog: Define children with a GtkBuilder template --- gtk/Makefile.am | 5 +- gtk/gtk.gresource.xml | 1 + gtk/gtkmessagedialog.c | 85 ++++-------------------------- gtk/gtkmessagedialog.ui | 112 ++++++++++++++++++++++++++++++++++++++++ gtk/tests/templates.c | 14 +++++ 5 files changed, 140 insertions(+), 77 deletions(-) create mode 100644 gtk/gtkmessagedialog.ui diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 250f03c464..44ee02d4cf 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1095,8 +1095,9 @@ DND_CURSORS = \ cursor_dnd_move.png \ cursor_dnd_none.png -COMPOSITE_TEMPLATES = \ - gtkdialog.ui +COMPOSITE_TEMPLATES = \ + gtkdialog.ui \ + gtkmessagedialog.ui # # rules to generate built sources diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml index 594d3ff994..329f29b038 100644 --- a/gtk/gtk.gresource.xml +++ b/gtk/gtk.gresource.xml @@ -12,5 +12,6 @@ cursor_dnd_move.png cursor_dnd_copy.png gtkdialog.ui + gtkmessagedialog.ui diff --git a/gtk/gtkmessagedialog.c b/gtk/gtkmessagedialog.c index 709fcfef0c..9755c70656 100644 --- a/gtk/gtkmessagedialog.c +++ b/gtk/gtkmessagedialog.c @@ -123,10 +123,6 @@ static void gtk_message_dialog_get_property (GObject *object, static void gtk_message_dialog_add_buttons (GtkMessageDialog *message_dialog, GtkButtonsType buttons); static void gtk_message_dialog_buildable_interface_init (GtkBuildableIface *iface); -static GObject * gtk_message_dialog_buildable_get_internal_child (GtkBuildable *buildable, - GtkBuilder *builder, - const gchar *childname); - enum { PROP_0, @@ -150,23 +146,10 @@ static void gtk_message_dialog_buildable_interface_init (GtkBuildableIface *iface) { parent_buildable_iface = g_type_interface_peek_parent (iface); - iface->get_internal_child = gtk_message_dialog_buildable_get_internal_child; iface->custom_tag_start = parent_buildable_iface->custom_tag_start; iface->custom_finished = parent_buildable_iface->custom_finished; } -static GObject * -gtk_message_dialog_buildable_get_internal_child (GtkBuildable *buildable, - GtkBuilder *builder, - const gchar *childname) -{ - if (strcmp (childname, "message_area") == 0) - return G_OBJECT (gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (buildable))); - - return parent_buildable_iface->get_internal_child (buildable, builder, childname); -} - - static void gtk_message_dialog_class_init (GtkMessageDialogClass *class) { @@ -311,15 +294,19 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class) GTK_TYPE_WIDGET, GTK_PARAM_READABLE)); + /* Setup Composite data */ + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/gtkmessagedialog.ui"); + gtk_widget_class_bind_child (widget_class, GtkMessageDialogPrivate, image); + gtk_widget_class_bind_child (widget_class, GtkMessageDialogPrivate, label); + gtk_widget_class_bind_child (widget_class, GtkMessageDialogPrivate, secondary_label); + gtk_widget_class_bind_child_internal (widget_class, GtkMessageDialogPrivate, message_area); + g_type_class_add_private (gobject_class, sizeof (GtkMessageDialogPrivate)); } static void gtk_message_dialog_init (GtkMessageDialog *dialog) { - GtkWidget *hbox; - GtkDialog *message_dialog = GTK_DIALOG (dialog); - GtkWidget *action_area, *content_area; GtkMessageDialogPrivate *priv; dialog->priv = G_TYPE_INSTANCE_GET_PRIVATE (dialog, @@ -327,65 +314,13 @@ gtk_message_dialog_init (GtkMessageDialog *dialog) GtkMessageDialogPrivate); priv = dialog->priv; - content_area = gtk_dialog_get_content_area (message_dialog); - action_area = gtk_dialog_get_action_area (message_dialog); - - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - gtk_window_set_title (GTK_WINDOW (dialog), ""); - gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), TRUE); - priv->has_primary_markup = FALSE; priv->has_secondary_text = FALSE; - priv->secondary_label = gtk_label_new (NULL); - gtk_widget_set_no_show_all (priv->secondary_label, TRUE); - - priv->label = gtk_label_new (NULL); - priv->image = gtk_image_new_from_stock (NULL, GTK_ICON_SIZE_DIALOG); - g_object_set (priv->image, "use-fallback", TRUE, NULL); - gtk_widget_set_halign (priv->image, GTK_ALIGN_CENTER); - gtk_widget_set_valign (priv->image, GTK_ALIGN_START); - - gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE); - gtk_label_set_selectable (GTK_LABEL (priv->label), TRUE); - gtk_widget_set_halign (priv->label, GTK_ALIGN_START); - gtk_widget_set_valign (priv->label, GTK_ALIGN_START); - - gtk_label_set_line_wrap (GTK_LABEL (priv->secondary_label), TRUE); - gtk_label_set_selectable (GTK_LABEL (priv->secondary_label), TRUE); - gtk_widget_set_halign (priv->secondary_label, GTK_ALIGN_START); - gtk_widget_set_valign (priv->secondary_label, GTK_ALIGN_START); - - gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.0); - gtk_misc_set_alignment (GTK_MISC (priv->secondary_label), 0.0, 0.0); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - priv->message_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - - gtk_box_pack_start (GTK_BOX (priv->message_area), priv->label, - FALSE, FALSE, 0); - - gtk_box_pack_start (GTK_BOX (priv->message_area), priv->secondary_label, - TRUE, TRUE, 0); - - gtk_box_pack_start (GTK_BOX (hbox), priv->image, - FALSE, FALSE, 0); - - gtk_box_pack_start (GTK_BOX (hbox), priv->message_area, - TRUE, TRUE, 0); - - gtk_box_pack_start (GTK_BOX (content_area), - hbox, - FALSE, FALSE, 0); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); - gtk_box_set_spacing (GTK_BOX (content_area), 14); /* 14 + 2 * 5 = 24 */ - gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); - gtk_box_set_spacing (GTK_BOX (action_area), 6); + priv->has_primary_markup = FALSE; + priv->has_secondary_text = FALSE; + gtk_widget_init_template (GTK_WIDGET (dialog)); gtk_message_dialog_style_updated (GTK_WIDGET (dialog)); - - gtk_widget_show_all (hbox); } static void diff --git a/gtk/gtkmessagedialog.ui b/gtk/gtkmessagedialog.ui new file mode 100644 index 0000000000..35a345306b --- /dev/null +++ b/gtk/gtkmessagedialog.ui @@ -0,0 +1,112 @@ + + + + + diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c index 199c99cbc8..51b6579d52 100644 --- a/gtk/tests/templates.c +++ b/gtk/tests/templates.c @@ -42,6 +42,19 @@ test_dialog_override_property (void) gtk_widget_destroy (dialog); } +static void +test_message_dialog_basic (void) +{ + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (NULL, 0, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "Do it hard !"); + g_assert (GTK_IS_DIALOG (dialog)); + gtk_widget_destroy (dialog); +} + int main (int argc, char **argv) { @@ -56,6 +69,7 @@ main (int argc, char **argv) g_test_add_func ("/Template/GtkDialog/Basic", test_dialog_basic); g_test_add_func ("/Template/GtkDialog/OverrideProperty", test_dialog_override_property); + g_test_add_func ("/Template/GtkMessageDialog/Basic", test_message_dialog_basic); return g_test_run(); } -- 2.30.2